package dao

import (
	mysql "sems/database"
	"sems/model"

	"go.uber.org/zap"
)

func CheckUser(username string) (user model.User, err error) {
	if err = mysql.Conn.Model(&model.User{}).Where("username=?", username).First(&user).Error; err != nil {
		zap.L().Error("CheckUser(username string) failed")
		return
	}
	return user, nil
}

func SaveUser(user model.User) (err error) {
	if err = mysql.Conn.Table("users").Save(&user).Error; err != nil {
		zap.L().Error("CheckUser(username string) failed")
		return
	}
	return nil
}

func GetUsers(username string, size, offset int) (users []model.User, count int64, err error) {
	// 要获取总记录数，我们需要执行一个查询
	if err = mysql.Conn.Table("users").
		Where("status='正常'").
		Where("username like ?", "%"+username+"%").
		Count(&count).Error; err != nil {
		zap.L().Error("Failed to get total count", zap.Error(err))
		return
	}
	if err = mysql.Conn.Table("users").
		Where("status='正常'").
		Where("username like ?", "%"+username+"%").
		Order("create_time desc").
		Limit(size).Offset(offset).
		Find(&users).Error; err != nil {
		zap.L().Error("GetUsers() failed")
		return
	}
	return users, count, err
}

func GetUserInfo(userId int) (user model.User, err error) {
	if err = mysql.Conn.Table("users").Where("user_id=?", userId).First(&user).Error; err != nil {
		zap.L().Error("GetUserInfo(userId int) failed")
		return
	}
	return user, nil
}

func EditUser(userId int, user model.User) (err error) {
	if err = mysql.Conn.Table("users").Where("user_id=?", userId).Updates(&user).Error; err != nil {
		zap.L().Error("GetUserInfo(userId int) failed")
		return
	}
	return nil
}

func DeleteUser(userId int) (err error) {
	if err = mysql.Conn.Table("users").Where("user_id=?", userId).Update("status", "删除").Error; err != nil {
		zap.L().Error("GetUserInfo(userId int) failed")
		return
	}
	return nil
}
